package com.itdianzi.controller.financial;
import com.alibaba.dubbo.config.annotation.Reference;
import com.github.pagehelper.PageInfo;

import com.itdianzi.domain.financial.Financial;
import com.itdianzi.domain.financial.FinancialExample;
import com.itdianzi.domain.invoice.Invoice;
import com.itdianzi.domain.invoice.InvoiceExample;
import com.itdianzi.service.cargo.FinancialService;
import com.itdianzi.service.invoice.InvoiceService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import com.itdianzi.controller.base.BaseController;

import java.util.List;

@Controller
@RequestMapping("/cargo/finance")
public class FinancialController extends BaseController {

    @Reference
    private FinancialService financialService;

    @Reference
    private InvoiceService invoiceService;

    // 1.查询所有  首页查询
    // 2.查询一个（查看） 根据id查询
    //3.更新（更改==增加《改变状态》）
    //4.新增
    //5. 删除
    //6.退货   退货业务：需要快速找到床架
       /*根据 公用id
       1.通过财务id 得到 装箱单的id
       * 通过财务的id 就可以直接 用  装箱单的id查询
       2.通过装箱单得到报运单
       * 报运单表形成的时候没有装箱单表，所以在装箱单表里面  有 报运单id （1，2，3，...）多个  （打断设计）
       3.通过报运单直接得到货物表
        货物表有合同id,所以报运单表有冗余字段合同id 1，2，3，... (打断设计)
        4.直接查询到厂家
        货物表里面有冗余字段 ——厂家字段，就可以直接查询厂家了*/
   //7.修改  对误操作 发票 和 财务的结合  进行修改




    // 1.查询所有  首页查询
    // http://localhost/cargo/export/list.do
    @RequestMapping("/list")
    public String contractList(@RequestParam(defaultValue = "1") Integer page, @RequestParam(defaultValue = "3") Integer size) {
        //页面显示所有财务数据  state  草稿 0和 5 财务 已付款
        FinancialExample financialExample = new FinancialExample();
        //根据日期排序
        //financialExample.setOrderByClause("inputDate");
        FinancialExample.Criteria criteria = financialExample.createCriteria();
        //封装条件    根据用户的企业id查询
        criteria.andCompanyIdEqualTo(super.companyId);
        PageInfo pageInfo =financialService.findAll(financialExample,page,size);
       //存入页面
        request.setAttribute("page",pageInfo);
        //返回创建的页面
        return "cargo/financial/financial-list";
    }





    //2. 查询一个（查看）  财务 根据id查询
    //http://localhost/cargo/export/toView.do?id=b
   @RequestMapping("/toView")
    public String toView(String id) {
       Financial financial =financialService.findByid(id);
       request.setAttribute("financial",financial);
        return "cargo/financial/financial-view";
    }




    //3.更新  提交  （更改《改变状态》）

    //提交
   //1. 将财务state  状态为0 草稿的 改为5 已付款
    //http://localhost/cargo/export/toupdate.do?id=b
    @RequestMapping("/toupdate")
 public String toupdate(String id) {
        Financial financial = new Financial();
        financial.setState(5);
        financial.setId(id);
        financialService.toupdate(financial);
        //2. 将 发票的state 0状态改为 5 财务已付款
       Invoice invoice = new Invoice();
       invoice.setState(5);
       invoice.setInvoiceId(id);
       invoiceService.update(invoice);
        return "redirect:/cargo/finance/list.do";
    }


    //4.新增页面
    //  //http://localhost/cargo/export/add.do?id=b
   //一丶查询发票的表 state状态 1 必须是已经提交的  回显页面
      //1.查询发票数据  根据state  1已提交状态

     // 2.发票数据回显在下半个页面
     //3.提交数据

    //二丶

    //1.添加制单日期 数据已经有了
    //2.添加制单人   数据已经有了

    //三丶保存所有数据到 财务表
     //1.state状态 为 0 草稿
      //2.保存数据到数据库

   @RequestMapping("/toAdd")  //数据回显示，没有分页   InvoiceService invoiceService;
       public String add() {
        InvoiceExample invoiceExample = new InvoiceExample();
       InvoiceExample.Criteria criteria = invoiceExample.createCriteria();
       criteria.andStateEqualTo(1);
       criteria.andCompanyIdEqualTo(super.companyId);
          List<Invoice> invoiceLists = invoiceService.findAll(invoiceExample);
          request.setAttribute("invoiceLists",invoiceLists);
      return "cargo/financial/financial-add";
  }

  @RequestMapping("/edit")//可能会有500一对一数据不重复 冲突
    public String edit(Financial financial,String Iid) {
        financial.setCompanyId(super.companyId);
        financial.setCompanyName(super.companyName);
        if (StringUtils.isBlank(financial.getId())) {
            financialService.save(financial,Iid);//新增
        }else {
            financialService.update(financial);//修改保存
        }
        return "redirect:/cargo/finance/list.do";
    }





  //  执行有问题  添加不上  查询不了 改变不来
    //5. 删除
    //1.如果删除的财务是 state状态为草稿的
    // 就是退回  把发票state 状态 改为0草稿
    //2.如果删除的财务是 state状态为5 财务 已付款 就是 直接删除信息
    //http://localhost/cargo/export/delete.do?id=b9
    @RequestMapping("/delete")
    public String delete(String id) {
        financialService.delete(id);
        return "redirect:/cargo/finance/list.do";
    }


    //6.退货
    //.退货   退货业务：需要快速找到厂家
       /*根据 公用id
       1.通过财务id 得到 装箱单的id
       * 通过财务的id 就可以直接 用  装箱单的id查询
       2.通过装箱单得到报运单
       * 报运单表形成的时候没有装箱单表，所以在装箱单表里面  有 报运单id （1，2，3，...）多个  （打断设计）
       3.通过报运单直接得到货物表
        货物表有合同id,所以报运单表有冗余字段合同id 1，2，3，... (打断设计)
        //货物 contractId;      //合同号
        //报运contractIds;			//打断字段，报运相关的多个合同的ID集合串
        4.直接查询到厂家
        货物表里面有冗余字段 ——厂家字段，就可以直接查询厂家了*/
    //货物 factoryName;//厂家名称，冗余字段
    /*@Reference
       private PackingService packingService;//装箱单*/
/*
    @Reference
    private ExportService exportService;//报运单
    @Reference
    private ContractProductService contractProductService;//货物单
    @Reference
    private FactoryService factoryService;

    //http://localhost/cargo/export/reg.do?id=b9  代码多可以后台service 改写
    @RequestMapping("/reg")
    public String reg(String id) {
     //id 公用的 可以直接当装箱单用
       // Packing packing = packingService.findByid(id);
        //String ids = packing.getId();
        String ids = "1,2,3,4";//模拟数据
        String[] id1 = ids.split(",");//报运单id
        for (int i = 0; i < id1.length; i++) {
            Export export = exportService.findById(id1[i]);//每个报运单
            String contractIds = export.getContractIds();
            String[] split = contractIds.split(",");//多个合同id
            for (int i1 = 0; i1 < split.length; i1++) {
            //  ContractProduct contractProduct = contractProductService.find(split[i1]);//根据合同id查询货物 多个 list
             //   System.out.println(contractProduct.getFactoryName());
            }

        }

        return "";
    }
*/





    //7.修改 数据错误重新选择  只有草稿才编辑
    //http://localhost/cargo/export/update.do?id=b9
   @RequestMapping("/update")
    public String update(String id) {
        Financial financial = financialService.findByid(id);
        request.setAttribute("financial",financial);
        return "cargo/financial/financial-update";
    }


    //逆向工程生成 发票的

}
//financial finance  页面
